#include <iostream>
#include <string>
#include <pthread.h>
#include <unistd.h>

void *routine(void *arg)
{
    std::string name = static_cast<char *>(arg);
    int cnt = 3;
    while (cnt--)
    {
        std::cout << "I am " << name << std::endl;
        sleep(1);
        //pthread_exit((void *)"finish abnormal");
    }
    return (void *)"finish normal";
}

int main()
{
    pthread_t tid;
    pthread_create(&tid, nullptr, routine, (void *)"thread-1");

    int cnt = 5;
    while (cnt--)
    {
        std::cout << "I am main thread" << std::endl;
        sleep(1);
        pthread_cancel(tid);
    }

    void *ret = nullptr;
    pthread_join(tid, &ret);

    std::cout << (char *)ret << std::endl;
    sleep(3);

    return 0;
}

//// 新线程入口
// void* routine(void* arg)
//{
//     std::string name = static_cast<char*>(arg);
//     std::cout << "i am " << name << std::endl;
//     sleep(10);
//     return nullptr;
// }
//
// int main()
//{
//     // 创建线程
//     pthread_t tid;
//     pthread_create(&tid, nullptr, routine, (void*)"thread-1");
//     std::cout << "i am main thread" << std::endl;
//
//     // 回收线程
//     pthread_join(tid, nullptr);
//     return 0;
// }

// void* routine(void* argv)
//{
//     std::string name = static_cast<char *>(argv);
//     int cnt = 3;
//     while(cnt--)
//     {
//         sleep(1);
//         std::cout << "my name:" << name << std::endl;
//     }
//     return nullptr;
// }
//
//
// int main()
//{
//     // 创建新线程
//     pthread_t tid;
//     pthread_create(&tid, nullptr, routine, (void*)"thread_1");
//
//     // 回收新线程
//     pthread_join(tid, nullptr);
//     sleep(3);
//
//     return 0;
// }